﻿#include<iostream>
using namespace std;
int main() {
	//常量指针，本质是个指针，只是指向常量，所以无法修改常量的值
	const int a{ 1000 };
	int b{ 2500 };

	const int* ptr{ &a };//const int*的作用是禁止修改指针指向的内存地址里的值，但是可以修改指向的内存地址
	ptr = &b;

	cout << *ptr;

	//指针常量，本质是个常量，只是指向内存地址，因为本身是一个常量，所以无法修改内存地址，但是可以修改内存地址里的值
	int c{ 1000 };
	.
		int d{ 1000 };
	int* const pptr{ &c };//int* const的作用是禁止修改指向的内存地址，但是可以修改指针指向的内存地址里的值
	*pptr = 9999;
	cout << c;

	//常量指针常量，因为指针常量指向内存地址，所以常量指针常量指向内存地址的值，因为常量的性质，无法修改内存地址里的值
	int e{ 1000 };
	int f{ 1400 };
	const int* const ppptr{ &a };

	ppptr = &f;//报错
	*ppptr = 123;//报错

	cout << *ppptr;

	const int g{ 1000 };
	int* ptrA{ (int*)&g };
	*ptrA = 9500;
	cout << *ptrA << endl;
	cout << g << endl;
}